﻿using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Runtime.Remoting.Messaging;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace WenSkin.Controls
{
    [Designer(typeof(WenUserControlDesigner))]
    public partial class WenUserControl : UserControl
    {

        public WenUserControl()
        {
            InitializeComponent();
            base.SetStyle(
                ControlStyles.UserPaint |
                ControlStyles.DoubleBuffer |
                ControlStyles.OptimizedDoubleBuffer |
                ControlStyles.AllPaintingInWmPaint |
                ControlStyles.ResizeRedraw |
                ControlStyles.SupportsTransparentBackColor, true);
            base.UpdateStyles();

            BackColor = Color.FromArgb(37, 37, 38);
        }

        private Color backColor = Color.FromArgb(37, 37, 38);
        private Color foreColor = Color.White;


        [Category("Wen")]
        [Description("用户控件图标")]
        [DefaultValue(null)]
        public Icon Icon { get; set; }

        [Category("Wen")]
        [Description("当前用户控件信息")]
        [Bindable(true)]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public override string Text { get => base.Text; set => base.Text = value; }

        [DefaultValue(typeof(Color), "White"), Category("WenColor"), Description("前景色")]
        public override Color ForeColor
        {
            get => foreColor;
            set
            {
                foreColor = value;
                base.ForeColor = value;
                this.Invalidate();
            }
        }

        [DefaultValue(typeof(Color), "Transparent"), Category("WenColor"), Description("背景色")]
        public override Color BackColor
        {
            get => this.backColor;
            set
            {
                //若为系统颜色改为酷黑色
                if (value == System.Drawing.SystemColors.Control)
                {
                    value = Color.Transparent;
                }
                base.BackColor = value;
                this.backColor = value;
                this.Invalidate();
            }
        }


        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (Icon == null)
            {
                Icon = WenSkin.Properties.Resources.logowen64px;
            }
        }

        #region 消息提示框
        /// <summary>
        /// 消息
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public bool MsgBoxInformation(string text)
        {
            var m = new MsgBox(text, MsgBox.MsgBoxIcon.Info).ShowDialog();
            if (m == DialogResult.OK)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 提醒
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public bool MsgBoxAsterisk(string text)
        {
            var m = new MsgBox(text, MsgBox.MsgBoxIcon.Asterisk).ShowDialog();
            if (m == DialogResult.OK)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 警告
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public bool MsgBoxWarning(string text)
        {
            var m = new MsgBox(text, MsgBox.MsgBoxIcon.Warning).ShowDialog();
            if (m == DialogResult.OK)
                return true;
            else
                return false;
        }
        /// <summary>
        /// 错误
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public bool MsgBoxError(string text)
        {
            var m = new MsgBox(text, MsgBox.MsgBoxIcon.Error).ShowDialog();
            if (m == DialogResult.OK)
                return true;
            else
                return false;
        }
        #endregion
    }
    internal class WenUserControlDesigner : ControlDesigner
    {

        private DesignerActionListCollection designer;

        public override DesignerActionListCollection ActionLists
        {
            get
            {
                if (designer is null)
                {
                    designer = new DesignerActionListCollection
                    {
                        new DesignerActionList(this.Component)
                        {
                            AutoShow=true,
                        }
                    };
                    designer.Add(new WenUserControlActionList(this));
                }
                return designer;
            }
        }
        public override void DoDefaultAction()
        {
            base.DoDefaultAction(); 
        }
    }
    internal class WenUserControlActionList : DesignerActionList
    {
        public WenUserControlActionList(WenUserControlDesigner designer) : base(designer.Component)
        {
            this._designer = designer;
        }
        public void Choose()
        {
            if (Component is WenUserControl control)
            {
                control.Text = "dddd";
            }
        }

        public WenUserControl WenUserControl => this.Component != null ? this.Component as WenUserControl : null;

        public string Text { get => WenUserControl.Text; set => WenUserControl.Text = value; }

        public Icon Icon { get => WenUserControl.Icon; set => WenUserControl.Icon = value; }
        public override DesignerActionItemCollection GetSortedActionItems()
        {

            ////类型
            //DesignerActionPropertyItem designer = new DesignerActionPropertyItem("Icon", "Text");
            ////linkLalbe
            //DesignerActionMethodItem designer2 = new DesignerActionMethodItem(this, "Choose", "fasdf");
            ////Header
            //DesignerActionHeaderItem designer1 = new DesignerActionHeaderItem("dddd");
            ////Text
            //DesignerActionTextItem designer3 = new DesignerActionTextItem("asdf", "Icon");

            DesignerActionPropertyItem icon = new DesignerActionPropertyItem("Icon", "图标");
            DesignerActionPropertyItem text = new DesignerActionPropertyItem("Text", "文本");


            return new DesignerActionItemCollection() { icon, text };

        }
        private WenUserControlDesigner _designer;
    }

}
